<script>
   // 新版一次性订阅消息开发指南

            //https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message-2.html

            /*
                一、接入指引

                        1、接入前准备

                                        开发者首先需要明确自己的服务业态，选择对应的 "业态卡片" 进行接入。

                                        开发者根据不同卡片的模版规则，向平台进行同步。

                                        每个卡片有若干状态模版（如“呼叫车辆中”、“司机赶往上车点中”等）,

                                        每个模版有不同的必填字段与选填字段（如“司机车牌号”、“预计到达上车点时间”等），平台依据状态流转信息向用户下发通知。


                        2、申请模版

                                    开发者需要登录 "小程序管理后台" ，
                                    
                                    在 「功能-订阅消息-公共模版库-一次性订阅」 中查询可以申请的模板，审核通过后可使用。

                                    模版有对应类目要求，符合类目要求的小程序可在公共模版库优先看到新版模版。

                                    需要注意的是，添加此类模板后，模板id不支持通过原方式进行订阅与下发，请勿通过 wx.requestSubscribeMessage  想用户申请订阅该模板。

                                    ★、申请一次性订阅模板操作示意图：

                                            https://res.wx.qq.com/wxdoc/dist/assets/img/subscribe_message_new_mp.6d17f9eb.png

                                    此外，开发者、待开发服务商可通过服务端接口  addMessageTemplate ， tid 见下文， kidList 请传入空数组。

                                    目前共支持支持模版情况如下：

                                            (支持模板列表)
                                            (在1.2位置)
                                            https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message-2.html


                        3、将微信支付订单号作为 code 的模版开发指南

                                        <1>、获取 code
                                            
                                                    当用户在小程序内进行支付后，根据下单渠道不同获取对应的code ：

                                                        （1）当前订单为普通微信支付订单
                                                                开发者可获得微信支付订单号，可直接作为 code 。

                                                        （2）当前订单为微信支付分订单
                                                                开发者可获得微信支付服务订单号，可直接作为 code 。

                                                    该code在当次服务进程中唯一，后续开发者更新用户的服务状态均通过此 code 进行。

                                                    ★、注意事项：

                                                            1、需要注意的是，微信支付订单号从生成到可被校验存在一定的时延的可能，若收到报错为 notify_code 不存在，建议在1分钟后重试

                                                            2、对于合单支付场景，需要使用子单的订单号作为 code ,多个子单可用于激活多个卡片，互补干扰。

                                                            3、仅支持当前小程序的 微信支付订单号/微信支付服务订单号，请勿使用其他小程序、公众号支付、APP支付的订单号。

                                                            4、不同的下单渠道在调用服务端接口  setUserNotify 时，需要在传入的字段中进行相应的声明。

                                        <2>、激活卡片

                                                    开发者需在支付完成24小时内调用服务端接口 setUserNotify 传入初始化卡片状态与状态相关字段（见1.1中各模版定义链接），以首次激活 code ，
                                                    
                                                    后续才可以继续通过 setUserNotify 更新服务的动态。

                                        <3>、更新卡片状态

                                                    code激活后，开发者可在激活后30天内调用服务端接口 setUserNotify 传入 "初始化卡片状态" 与 "状态相关字段" (见1.1中各模版定义链接)。

                                                    超过30天，或状态五可变更的下一个状态时(如状态更新到"订单已完成")，不再允许开发者更新。


                        4、通过前端获取 code 的模板开发指南

                                        <1>、获取 code
                                            
                                                   开发者需要在前端将触发服务的 button 组件的 open-type 的值设置为 liveActivity,  设置 activity-type 参数为 notify_type。
                                                   
                                                   当用户点击 button 后，可以通过 bindcreateliveactivity 事件回调获取到 code。

                                                   该 code在当次服务进程中唯一， 后续开发者更新用户的服务装填均同错此 code 进行。
                                                   
                                                 ★、注意事项：

                                                        平台会对相关 button 组件进行检测，包括是否诱导用户点击、通过与卡片无关的按钮获取 code 等。

                                                 ★、代码示例：

                                                           <button open-type="liveActivity" activity-type="1001" bindcreateliveactivity="onLiveActivityCreate">立即呼叫</button>
                                                   
                                                            Page({
                                                                onLiveActivityCreate (evt) {
                                                                    console.log(evt.detail.code)
                                                                }
                                                            })

                                        <2>、激活卡片

                                                    开发者需要在获取后5分钟内调用服务端接口  setUserNotify 传入初始化卡片状态与状态相关字段 (见1.1中各模版定义链接),

                                                    以首次激活 code， 后续才可以继续通过 setUserNotify 更新服务动态。

                                        <3>、更新卡片状态

                                                    code激活后，可在激活后24小时内调用服务端接口 setUserNotify,  更新卡片状态与状态相关字段 （见1.1中各模版定义链接）

                                                    超过24小时，或状态吴科变更的下一状态时 (如状态更新到 "订单已完成")，不再允许开发者更新。


                    5、监听事件开发指南

                                  开发者调用服务端接口  setUserNotify 后，会触发平台下发订阅信息，开发者可通过接入 “微信小程序消息推送服务”，
                                  
                                                        https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html

                                  来接收订阅消息下发失败事件。

                                  ★、订阅消息下发失败事件参数如下：

                                                          参数                    描述

                                                        ①、ToUserName           小程序账号ID

                                                        ②、FromUserName         用户openid

                                                        ③、CreateTime           时间戳

                                                        ④、MsgType              消息类型，固定为"event"

                                                        ⑤、Event                事件类型，固定为"notify_service_msg_send_result"

                                                        ⑥、openid               用户openid

                                                        ⑦、notify_code          动态更新令牌

                                                        ⑧、notify_type          卡片id

                                                        ⑨、card_status          状态id

                                                        ⑩、fail_ret             错误码：
                                                                                        -10001 系统错误；
                                                                                        -10002 内容安全校验不通过；
                                                                                        -1003 未添加订阅消息模版；
                                                                                        -1004 用户拒收此 模版；
                                                                                        -1005 消息下发过于频繁被拦截
                                                        
                                                        ⑪、fail_msg	        错误信息

                                        
                                             ★、JSON格式示例如下：
                                                
                                                        {
                                                                "ToUserName":"gh_e5e82d93a62a",
                                                                "FromUserName":"o7esq5PHRGBQYmeNyfG064wEFVpQ",
                                                                "CreateTime":1699428279,
                                                                "MsgType":"event",
                                                                "Event":"notify_service_msg_send_result",
                                                                "openid":"o7esq5PHRGBQYmeNyfG064wEFVpQ",
                                                                "notify_code":"p1.4200002043202311087295582095",
                                                                "notify_type":2006,
                                                                "card_status":4,
                                                                "fail_ret":-1004,
                                                                "fail_msg":"user reject message "
                                                        }
                               


                             6、其他功能开发指南
                                
                                        <1>、查询卡片状态

                                                        由于卡片状态的更新有一套严格的校验机制，在开发者向平台同步信息的过程中，存在信息丢失、更新不及时等场景，

                                                        因此开发者可以通过服务端接口 getUserNotify 查询 code 对应在平台侧存储的状态与服务相关信息。

                                        <2>、传入扩展信息

                                                        开发者通过此功能除了可以向用户下发通知，还可以通过服务端接口 getUserNotifyExt 传入更多服务相关信息，实现更多功能，当前支持的能力包括：
            */
</script>